#ifndef __UTILITY_H__
#define __UTILITY_H__

#include "typedef.h"

uint64_t BCD_to_Dec(const uint8_t *bcd, uint32_t len);
void ASC_to_BCD(uint8_t *bcd,  const uint8_t *asc, uint32_t len);
void BCD_to_ASC (uint8_t *asc, const uint8_t *bcd, uint32_t len);

uint32_t ut_getword(const uint8_t *buf, int32_t *pos);
uint16_t ut_getshort(const uint8_t *buf, int32_t *pos);
uint8_t ut_getbyte(const uint8_t *buf, int32_t *pos);
int32_t ut_getnbyte(const uint8_t *buf, int32_t *pos, uint8_t *data, int32_t len);
int32_t ut_setword(uint8_t *buf, int32_t pos, uint32_t data);
int32_t ut_setshort(uint8_t *buf, int32_t pos, uint16_t data);
int32_t ut_setbyte(uint8_t *buf, int32_t pos, uint8_t data);
int32_t ut_setnbyte(uint8_t *buf, int32_t pos, const uint8_t *data, int32_t len);

void ut_atom_num(char_t *buf,  int64_t n, int32_t fmt);
void ut_itostr(uint32_t val, char_t *buf, int32_t fmt);

/*要求value必须为char型数组*/
#define get_cmd_str(buf, cmd, value) _get_cmd_str(buf, cmd, value, sizeof(value))
    
void _get_cmd_str(const char_t *buf, const char_t *cmd, char_t *value, int32_t len);

int32_t str_equal(const char_t *src, const char_t *dst);

uint32_t get_cmd_value(const char_t *str, const char_t *cmd);
uint32_t get_cmd_float(const char_t *str, const char_t *cmd);
void get_cmd_bcd(const char *str, const char *cmd, char_t *value, uint32_t len);
int32_t get_cmd_cost(const char_t *str, uint16_t *charge_fee, uint16_t *service_fee, int32_t len);
int32_t get_tzone_value(const char *str, uint16_t *value, int32_t len);

void set_cmd_str(char_t *str, const char_t *cmd, const char_t *value);
void set_cmd_value(char_t *str, const char_t *cmd, uint32_t value);
void set_cmd_hex(char_t *str, const char_t *cmd, uint32_t value);
void set_cmd_float(char *str, const char *cmd, uint32_t value);
void set_cmd_bcd(char *str, const char *cmd, const char_t *value, uint32_t len);


#endif
